package hsrt.com.dynamiccomponent_android.dynamic_component;

import java.util.HashMap;
import java.util.Map;

public class EventManager {

    interface Subscriber {
        void receiveData(DataElementInterface sender, String data);
    }


    //1 需要注册Subscriber对象和dataelement的映射关系,以便于通过dataelement之间的关系进行寻找,对应的订阅者.

    // 可以添加一个dataelement,但是在创建component的时候需要进行关联对应的dataelement.所以需要知道哪个字段是订阅字段.


    /**
     * 1 在parser的时候需要设置好了dataelement,其中的操作就是要设置好订阅关系 √
     * 2 因为现在一旦加载就缓存了所有的component ,所以可以方便的找到处理单元,edittext处理的时候sendnext到对应的dataelement,并查找到dataelement所属component,
     *   发送信息然后component接收到数据就改变了.一定要记住component是处理单元,**component**改个名字叫做task
     */


    private Map<DataElementInterface, Subscriber> bindMap = new HashMap<>();

    /**
     * 注册订阅者和数据的关联关系
     *
     * @param dataElement .
     * @param component   .
     */
    public void registerSubscriber(DataElementInterface dataElement, Subscriber component) {
        if (dataElement.isSubscriber() && component != null) {
            bindMap.put(dataElement, component);
        }
    }


    /**
     * 向订阅者dataElement发送信息
     *
     * @param dataElement .
     * @param data        .
     */
    public void sendNext(DataElementInterface dataElement, DataElementInterface sender, String data) {
        Subscriber subscriber = bindMap.get(dataElement);
        subscriber.receiveData(sender, data);
    }
}
